/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package service;

import database.AccesoDB;
import entity.Cliente;
import entity.Cuenta;
import entity.Empleado;
import entity.Movimiento;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


import java.sql.Types;
import java.util.ArrayList;
import java.util.List;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;

/**
 *
 * @author Administrador
 */
public class EurekaService {

    public List<Empleado> conEmpleados(String paterno) throws Exception {
        List<Empleado> lista = new ArrayList<Empleado>();
        Connection cn = AccesoDB.getConnection();
        String query = "select * from empleado where vch_emplpaterno like ?";
        PreparedStatement pstm = cn.prepareStatement(query);
        pstm.setString(1, "%" + paterno + "%");
        ResultSet rs = pstm.executeQuery();
        while (rs.next()) {
            Empleado obj = new Empleado();
            obj.setCodigo(rs.getString("chr_emplcodigo"));
            obj.setPaterno(rs.getString("vch_emplpaterno"));
            obj.setMaterno(rs.getString("vch_emplmaterno"));
            obj.setNombre(rs.getString("vch_emplnombre"));
            obj.setDireccion(rs.getString("vch_empldireccion"));
            obj.setCiudad(rs.getString("vch_emplciudad"));
            obj.setUsuario(rs.getString("vch_emplusuario"));
            obj.setClave(rs.getString("vch_emplclave"));
            lista.add(obj);
        }
        pstm.close();
        return lista;
    }

    public String registrarCliente(Cliente cliente) {

        String mensaje=""; /*ok si todo fue bien*/
        try {
            Connection conn = AccesoDB.getConnection();

            CallableStatement stmt = conn.prepareCall("BEGIN usp_registrar_cliente(?,?,?,?,?,?,?,?,?); END;");

            stmt.registerOutParameter(9, Types.VARCHAR);

            stmt.setString(1, cliente.getPaterno());
            stmt.setString(2, cliente.getMaterno());
            stmt.setString(3, cliente.getNombre());
            stmt.setString(4, cliente.getDni());
            stmt.setString(5, cliente.getCiudad());
            stmt.setString(6, cliente.getDireccion());
            stmt.setString(7, cliente.getTelefono());
            stmt.setString(8, cliente.getEmail());


            stmt.execute();
             mensaje = stmt.getString(9);

            System.out.println(" mensaje : " + mensaje);


            stmt.close();
            stmt = null;
            conn.close();
            conn = null;
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
        }

        return mensaje;
    }

    public String registrarDeposito(Movimiento m) {

         String mensaje="";/*ok si todo fue bien*/
        try {
            Connection conn = AccesoDB.getConnection();

            CallableStatement stmt = conn.prepareCall("BEGIN usp_deposito(?,?,?,?); END;");

            stmt.registerOutParameter(4, Types.VARCHAR);

            stmt.setString(1, m.getCuenta());
            stmt.setDouble(2,Double.parseDouble( m.getImporte()));
            stmt.setString(3, m.getEmpleado());


            stmt.execute();
            mensaje = stmt.getString(4);

            System.out.println(" mensaje : " + mensaje);


            stmt.close();
            stmt = null;
            conn.close();
            conn = null;
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
        return mensaje;

    }

    
  /*  ---------------------*/
    
    
    
    public List<Movimiento> consultaMovimientos(String cod) {

        List<Movimiento> listMov = new ArrayList<Movimiento>();


        try {
            Connection conn = AccesoDB.getConnection();

            CallableStatement stmt = conn.prepareCall("BEGIN sp_movimientos(?, ?); END;");
            stmt.setString(1, cod); // CodCuenta


            stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR


            stmt.execute();

            ResultSet rs = ((OracleCallableStatement) stmt).getCursor(2);
            while (rs.next()) {
                Movimiento movimiento = new Movimiento();
                movimiento.setNumeroMov(String.valueOf(rs.getInt("INT_MOVINUMERO")));                 
                movimiento.setTipo(rs.getString("CHR_TIPOCODIGO"));                 
                movimiento.setFecha(String.valueOf(rs.getDate("DTT_MOVIFECHA")));
                movimiento.setImporte(String.valueOf(rs.getDouble("DEC_MOVIIMPORTE")));
                
                listMov.add(movimiento);
                        
                System.out.println(rs.getString("chr_cuencodigo") + ":" + rs.getString("chr_tipocodigo") + " numero :"  + listMov.size());
            }
            rs.close();
            rs = null;
            stmt.close();
            stmt = null;
            conn.close();
            conn = null;
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
        
        return listMov;

    }
    
    
    public String consultaCliente(String cod )            
    {
        String nombreCompleto="" ;
        
         try {
            Connection conn = AccesoDB.getConnection();

            CallableStatement stmt = conn.prepareCall("BEGIN datosCliente(?,?); END;");

            stmt.registerOutParameter(2, Types.VARCHAR);

            stmt.setString(1, cod);
           


            stmt.execute();
           nombreCompleto = stmt.getString(2);

            System.out.println(" mensaje : " + nombreCompleto);


            stmt.close();
            stmt = null;
            conn.close();
            conn = null;
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
            e.printStackTrace();
        }
        
        
        return nombreCompleto;
    }
          
    
     public List<Cuenta> datosCuenta(Cuenta cuent) {

        List<Cuenta> listCue = new ArrayList<Cuenta>();


        try {
            Connection conn = AccesoDB.getConnection();

            CallableStatement stmt = conn.prepareCall("BEGIN datosCuenta(?, ?); END;");
            stmt.setString(1, cuent.getCodigo()); // CodCuenta


            stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR


            stmt.execute();

            ResultSet rs = ((OracleCallableStatement) stmt).getCursor(2);
            while (rs.next()) {
               
                Cuenta cuenta = new Cuenta();
                
               cuenta.setCodMoneda(rs.getString("chr_monecodigo"));
               cuenta.setSaldo(rs.getDouble("dec_cuensaldo"));
               
                
                listCue.add(cuenta);
                        
                System.out.println(rs.getString("chr_monecodigo") + ":" + rs.getDouble("dec_cuensaldo") + " numero :"  + listCue.size());
            }
            rs.close();
            rs = null;
            stmt.close();
            stmt = null;
            conn.close();
            conn = null;
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
        
        return listCue;

    }
   
    public static void main(String[] args) {
        
        Cuenta cuenta = new Cuenta();
        cuenta.setCodigo("00200003");
        
        EurekaService es = new EurekaService();
        List<Cuenta> cs = es.datosCuenta(cuenta);
        System.out.println(cs.get(0).getSaldo() + "");
        System.out.println(cs.get(0).getCodMoneda() + "");
                
                
        
    }
    
    
    
   /* public static void main(String[] args) {
    
    Cliente c = new Cliente();
    
    c.setPaterno("ZEGARRA");
    c.setMaterno("GARCIA");
    c.setNombre("FERNANDO MOISES");
    c.setDni("10772365");
    c.setDireccion("SAN ISIDRO");
    c.setCiudad("LIMA");
    c.setTelefono("936-45876");
    c.setEmail("f.zegarra@hotmail.com");
    
    EurekaService es = new EurekaService();
    es.registrarCliente(c);
    
    }*/
    /* 
     public static void main(String[] args) {
    
    EurekaService es = new EurekaService();
    Movimiento m = new Movimiento();
    m.setCuenta("00200001");
    m.setImporte(1520);
    m.setEmpleado("9999");
    
    es.registrarDeposito(m);
    
    }
     */
/*
    public static void main(String[] args) {

        EurekaService es = new EurekaService();
        es.consultaMovimientos("00100001");

    }*/
   /* 
    public static void main(String[] args) {
        EurekaService es = new EurekaService();
        System.out.println(es.consultaCliente("00200001"));
    }
       */      
}
